package com.boot.reference;

import java.lang.ref.PhantomReference;
import java.lang.ref.ReferenceQueue;
import java.lang.ref.SoftReference;
import java.lang.ref.WeakReference;
import java.util.WeakHashMap;

public class ReferenceTester {
    public static void main(String[] args) {
        // 在引用对象被回收时会把引用对象加入到队里 引用对象已经无用了 但是不会立刻回收 可以对无用的引用对象进行清理 防止内存泄漏
        ReferenceQueue referenceQueue =new ReferenceQueue();

        //软引用 内存足够时不回收
        SoftReference<Object> r1 =new SoftReference<>(new Object(),referenceQueue);
        //弱引用 只要gc就回收  无论是否充足
        Object o2 =new Object();
        WeakReference<Object> r2 = new WeakReference<>(new Object(),referenceQueue);
        // 虚引用 虚引用和前面的软引用、弱引用不同，它并不影响对象的生命周期
        PhantomReference<Object> r3 = new PhantomReference<>(new Object(),referenceQueue);

        WeakHashMap weakHashMap = new WeakHashMap();


    }
}
